"""
特征提取模块
从检测到的人脸中提取特征向量
"""

import face_recognition
import numpy as np
from typing import List, Tuple, Optional


def extract_face_features(image_path: str, face_locations: Optional[List[Tuple[int, int, int, int]]] = None) -> List[np.ndarray]:
    """
    提取人脸特征向量
    :param image_path: 图像路径
    :param face_locations: 人脸位置列表，如果为None则自动检测
    :return: 人脸特征向量列表
    """
    try:
        # 加载图像
        image = face_recognition.load_image_file(image_path)
        
        # 如果没有提供人脸位置，则自动检测
        if face_locations is None:
            face_locations = face_recognition.face_locations(image)
        
        # 提取人脸特征，使用更高的采样点数来提高质量
        # num_jitters参数控制用于计算编码的重新采样次数，值越高越准确但越慢
        # 默认为1，我们将其提高到5以获得更高质量的编码
        face_encodings = face_recognition.face_encodings(image, face_locations, num_jitters=5)
        return face_encodings
    except Exception as e:
        print(f"特征提取失败: {e}")
        return []